#ifndef __LIGHT_CAM__
#define __LIGHT_CAM__

#include "../../Epsilon/Epsilon3D/vector3.h"
#include "../../Epsilon/Epsilon3D/matrix.h"

/* Homogenous Coords : Unsupported... */

class eTB_LightCam
{
protected:
  float m_fFOV;
  float m_fAspectRatio;
  float m_fNearZ;
  float m_fFarZ;

  e3dVector3 m_Position3;
//  D3DXVECTOR4 m_Position4;

  float m_CamInitialY;

  e3dVector3 m_Up;
  e3dVector3 m_Look3;
  //D3DXVECTOR4 m_Look4;
  e3dVector3 m_Right;

  e3dMatrix4x4 m_ViewMat;
  e3dMatrix4x4 m_ProjMat;
  e3dMatrix4x4 m_ViewProjMat;


  void setProjMat (); 

public:
  //initialize fields of the class camera and set up the projection matrix.

  eTB_LightCam (e3dVector3 inPos, float inFov, float inAspect, float inNearZ, float inFarZ);

  //the destructor of the class.
  ~eTB_LightCam()
  {

  }

  void updateViewMat(); 

  e3dVector3& getPosition();
//  e3dVector4& getPosition4();

  void setPosition(e3dVector3 inPosition);
  void updateViewProjMat();

  e3dMatrix4x4& getViewMat();
  e3dMatrix4x4& getProjMat();
  e3dMatrix4x4& getViewProjMat();
//  D3DXMATRIXA16* getViewProjLastMat();

  e3dVector3& getLook ();
//  D3DXVECTOR4* getLook4();
  e3dVector3& getRight ();
  e3dVector3& getUp ();

  void setLook  (e3dVector3 inLook);
  void setUp    (e3dVector3 inUp);
  void setRight (e3dVector3 inRight);

  virtual void updateCamera(); 
};

#endif /* __LIGHT_CAM__ */
